Newer
Older
Simple-Multiplayer-Unity3D / Multiplayer Project / Library / PackageCache / [email protected] / Editor / Settings / OpenPlasticProjectSettings.cs
using System;
using System.Reflection;

using UnityEditor;

using Codice.Client.Common.Threading;
using Unity.PlasticSCM.Editor.UI;

namespace Unity.PlasticSCM.Editor.Settings
{
    internal static class OpenPlasticProjectSettings
    {
        internal static void ByDefault()
        {
            PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();

            if (provider == null)
                return;

            provider.OpenAllFoldouts();
        }

        internal static void InShelveAndSwitchFoldout()
        {
            PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();

            if (provider == null)
                return;

            provider.OpenShelveAndSwitchFoldout();
        }

        internal static void InOtherFoldout()
        {
            PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();

            if (provider == null)
                return;

            provider.OpenOtherFoldout();
        }

        internal static PlasticProjectSettingsProvider OpenInPlasticProjectSettings()
        {
            EditorWindow settingsWindow = OpenProjectSettingsWithPlasticSelected();
            return GetPlasticProvider(settingsWindow);
        }

        internal static EditorWindow OpenProjectSettingsWithPlasticSelected()
        {
            return SettingsService.OpenProjectSettings(
                UnityConstants.PROJECT_SETTINGS_TAB_PATH);
        }

        internal static PlasticProjectSettingsProvider GetPlasticProvider(
            EditorWindow settingsWindow)
        {
            try
            {
                /* The following code must be compiled only for editor versions that allow our code
                 to access internal code from the editor, otherwise the ProjectSettingsWindow is not
                 accessible and the compilation fails.
                 We don't know yet the version number that allows us to access this code, so for the
                 moment the code is commented

#if UNITY_6000_0_OR_NEWER
                ProjectSettingsWindow projectSettingsWindow = settingsWindow as ProjectSettingsWindow;
                return projectSettingsWindow.GetCurrentProvider() as PlasticProjectSettingsProvider;
#else            */

                MethodInfo getCurrentProviderMethod = settingsWindow.GetType().GetMethod(
                    "GetCurrentProvider",
                    BindingFlags.Instance | BindingFlags.NonPublic);

                return getCurrentProviderMethod.Invoke(
                    settingsWindow, null) as PlasticProjectSettingsProvider;
//#endif
            }
            catch (Exception ex)
            {
                ExceptionsHandler.LogException("OpenPlasticProjectSettingsProvider", ex);
                return null;
            }
        }
    }
}